package com.learn.multi_thread.A_BaseThread.E_ProductionOfConsumers.A_BasicImplementation;

public class ConsumerOfCook extends Thread{
    /**
     * 编写流程
     * 1. 循环
     * 2. 同步代码块
     * 3. 判断共享数据是否到了末尾（到了末尾该如何）
     * 4. 判断共享数据是否到了末尾（没有到末尾，执行核心代码）
     */

    @Override
    public void run() {
        while (true) {
            synchronized (MiddleOfDesk.lock) {
                if (MiddleOfDesk.count == 0) {
                    break;
                } else {
                    // 判断桌子上是否有面条
                    if (MiddleOfDesk.foodFlag == 0) {
                        // 如果没有，则等待
                        try {
                            // 让当前线程跟锁进行绑定
                            MiddleOfDesk.lock.wait();
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    } else {
                        // 吃的总数-1
                        MiddleOfDesk.count--;
                        // 如果有，就开吃
                        System.out.println("正在吃面条，还能再吃" + MiddleOfDesk.count + "碗");
                        // 吃完之后，唤醒厨师继续做
                        MiddleOfDesk.lock.notifyAll();
                        // 修改桌子的状态
                        MiddleOfDesk.foodFlag = 0;
                    }
                }
            }
        }
    }
}
